package com.hk.service.kyc;

import java.util.List;

import com.hk.commons.HqlFilter;
import com.hk.commons.entity.Card;
import com.hk.commons.entity.UserCard;
import com.hk.commons.entity.sys.SysUser;

public interface IUserCard {

	public UserCard findById(Long id);

	/**
	 * 保存
	 * 
	 * @param b
	 * @return
	 */
	public Long add(UserCard u);

	/**
	 * 删除
	 * 
	 * @param id
	 * @return
	 */
	public void delete(UserCard u);

	/**
	 * 更新
	 * 
	 * @param b
	 */
	public void update(UserCard u);

	public List<UserCard> findByFilter(HqlFilter hqlFilter, int pageNum,
			int pageSize);

	public List<UserCard> findByFilter(HqlFilter hqlFilter);

	public Long countByFilter(HqlFilter hqlFilter);

	/**
	 * 获取所有的卡券
	 * 
	 * @return
	 */
	public List<UserCard> getActiveUserCard();

	public void updateUserCardInfo(UserCard userCard, int cardStatus,
			Long orderId);

	/**
	 * 用户下单时，先把数据存入redis中
	 * 
	 * @param userCard
	 */
	public void addIntoRedis(UserCard userCard);

	/**
	 * 删除Redis中加息券的信息
	 * 
	 * @param userCard
	 */
	public void deleteFromRedis(Long orderId);

	/**
	 * 当支付成功之后，更改加息券的使用记录。并删除redis中
	 * 
	 * @param userCard
	 */
	public UserCard updateStatus(Long userCardId, Long orderId, Boolean status);

	/**
	 * 从缓存中获取加息券
	 * 
	 * @param orderId
	 * @return
	 */
	public UserCard getFromRedis(Long orderId);

	/**
	 * 更加订单ID 从数据库中获取加息券
	 * 
	 * @param orderId
	 * @return
	 */
	public UserCard getByOrderId(Long orderId);
	
	
	/**
	 * 给指定的用户添加指定的加息券
	 * @param userList
	 * @param cardId
	 * @return
	 */
	public Integer sendCardToUsers(List<SysUser> userList);
	
	/**
	 * 给指定的用户添加指定的加息券
	 * @param userList
	 * @param cardId
	 * @return
	 */
	public Boolean sendCardToUser(SysUser user);
	
	/**
	 * 判断卡券是否存在
	 * @param cardId
	 * @return
	 */
	public Boolean checkUserCard(Integer cardId);
	
	/**
	 * 检查派送的加息券
	 * @return
	 */
	public Card checkSendCard();
}